#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<string.h>

#include<assert.h>

//模拟实现库函数——内存函数——memmove
//memnove和memcpy很相似，但是相比memcpy要更全面一些，可以拷贝同一块空间的数组，或者说可以拷贝重叠内容
//                                                                         memcpy做不到
void* my_memmove(void* dest, void* src, size_t num)
{
	//断言
	assert(dest && src);
	void* ret = dest;
	if (dest > src)//如果目标地址大于被拷贝(源头)地址，从后向前拷贝
	{
		while (num--)
		{
			*((char*)dest+num) = *((char*)src+num);
		}
	}
	else//如果目标地址小于等于被拷贝(源头)地址，从前向后拷贝
	{
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	return ret;
}

int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	           //  1 2 1 2 3 4 5 8 9 10
	//memmove(arr1 + 2, arr1, 20);
	my_memmove(arr1+2 , arr1, 20);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n\n\n");
	return 0;
}